Shaders are often used in the field of graphics processing to dynamically provide high quality images for applications, such as video games. Shaders can be used by applications to adjust, the levels of light and color for images displayed to the user in real-time. Well-known shaders in the field include vertex shaders, geometry shaders, pixel shaders, etc. In providing this high degree of rendering flexibility, shaders are often compiled during a run-time execution of an application. As such, shader compilers generally have a very short amount of time to produce an optimized shader compilation.
When performing optimization procedures on a shader, shader compilers generally have the burden of selecting an ordered list of optimizations from a very large configuration space. The order and selection of optimization passes performed during optimization procedures can significantly affect the performance of shaders, both in execution performance and power. As such, conventional methods generally fail to provide shader compilers with an efficient selection strategy that may be executed within the limited amount of time available for them to perform these optimization procedures for compilation. Furthermore, the inefficiencies associated with conventional methods may result in poor shader performance and, ultimately, may result in the user being frustrated with an application's performance.